/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package tpv;

import java.util.ArrayList;

/**
 *
 * @author david
 */
public class ReglaNoAcumulable extends GrupoReglas
{
    public ReglaNoAcumulable(ArrayList<Regla> reglas)
    {
	super(reglas);
    }

    private Regla best;

    @Override
    public double getPorcentaje(Venta venta)
    {
	double aux = Regla.SIN_DESCUENTO;
	double dctoMax = Regla.SIN_DESCUENTO;
	best = null;

	for (Regla r : reglas)
	{
	    aux = r.getPorcentaje(venta);

	    if (aux > dctoMax)
	    {
		dctoMax = aux;
		best = r;
	    }
	}

	return dctoMax;
    }

    @Override
    public double aplicar(Venta venta)
    {
	if (isAplicable(venta))
	{
	    getPorcentaje(venta);
	    return best == null ? Regla.SIN_DESCUENTO : best.aplicar(venta);
	}

	return Regla.SIN_DESCUENTO;
    }

    public static void main(String[] args)
    {
	ReglaTarjeta rt = new ReglaTarjeta(0.15);
	ReglaEmpleado re = new ReglaEmpleado(0.3);
	ReglaMiercoles rm = new ReglaMiercoles(0.1, 10, 12);

	ArrayList<Regla> reglas = new ArrayList<Regla>();

	reglas.add(rt);
	reglas.add(re);
	reglas.add(rm);

	ReglaNoAcumulable ra = new ReglaNoAcumulable(reglas);

	Producto p1 = new Producto("a", "a", 15);
	Producto p2 = new Producto("b", "b", 50);
	Producto p3 = new Producto("c", "c", 77);

	LinVenta l1 = new LinVenta(p1, 3);
	LinVenta l2 = new LinVenta(p2, 4);
	LinVenta l3 = new LinVenta(p3, 2);
	LinVenta l4 = new LinVenta(p1, 3);
	LinVenta l5 = new LinVenta(p2, 4);
	LinVenta l6 = new LinVenta(p3, 2);
	LinVenta l7 = new LinVenta(p1, 3);
	LinVenta l8 = new LinVenta(p2, 4);
	LinVenta l9 = new LinVenta(p3, 2);

	Fecha f1 = new Fecha("J", 11, 38);
	Fecha f2 = new Fecha("X", 10, 0);

	Venta v1 = new Venta(true, false, f2);
	Venta v2 = new Venta(false, true, f2);
	Venta v3 = new Venta(true, true, f1);

	v1.anyadirLinVenta(l1);
	v1.anyadirLinVenta(l2);
	v1.anyadirLinVenta(l3);

	v2.anyadirLinVenta(l4);
	v2.anyadirLinVenta(l5);
	v2.anyadirLinVenta(l6);

	v3.anyadirLinVenta(l7);
	v3.anyadirLinVenta(l8);
	v3.anyadirLinVenta(l9);

	ra.aplicar(v1);

	System.out.println("Venta 1");
	System.out.println("-------");

	for (LinVenta lv : v1.getLineas())
	{
	    Producto p = lv.getItem();
	    System.out.println("Producto: " + p.getCodigo());
	    System.out.println("Precio Unitario: " + p.getPrecio());
	    System.out.println("Cantidad: " + lv.getCantidad());
	    System.out.println("Descuento: " + lv.getDescuento());
	    System.out.println("Precio: " + (p.getPrecio() * lv.getCantidad() -
					     lv.getDescuento()));
	    System.out.println();
	}

	ra.aplicar(v2);

	System.out.println("Venta 2");
	System.out.println("-------");

	for (LinVenta lv : v2.getLineas())
	{
	    Producto p = lv.getItem();
	    System.out.println("Producto: " + p.getCodigo());
	    System.out.println("Precio Unitario: " + p.getPrecio());
	    System.out.println("Cantidad: " + lv.getCantidad());
	    System.out.println("Descuento: " + lv.getDescuento());
	    System.out.println("Precio: " + (p.getPrecio() * lv.getCantidad() -
					     lv.getDescuento()));
	    System.out.println();
	}

	ra.aplicar(v3);

	System.out.println("Venta 3");
	System.out.println("-------");

	for (LinVenta lv : v3.getLineas())
	{
	    Producto p = lv.getItem();
	    System.out.println("Producto: " + p.getCodigo());
	    System.out.println("Precio Unitario: " + p.getPrecio());
	    System.out.println("Cantidad: " + lv.getCantidad());
	    System.out.println("Descuento: " + lv.getDescuento());
	    System.out.println("Precio: " + (p.getPrecio() * lv.getCantidad() -
					     lv.getDescuento()));
	    System.out.println();
	}
    }

}
